
typedef struct s_stackframe {
	u32	gs;		    /* \                                    */
	u32	fs;		    /* |                                    */
	u32	es;		    /* |                                    */
	u32	ds;		    /* |                                    */
	u32	edi;		/* |                                    */
	u32	esi;		/* | pushed by save()                   */
	u32	ebp;		/* |                                    */
	u32	kernel_esp;	/* <- 'popad' will ignore it            */
	u32	ebx;		/* |                                    */
	u32	edx;		/* |                                    */
	u32	ecx;		/* |                                    */
	u32	eax;		/* /                                    */
	u32	retaddr;	/* return addr for kernel.asm::save()   */
	u32	eip;		/* \                                    */
	u32	cs;		    /* |                                    */
	u32	eflags;		/* | pushed by CPU during interrupt     */
	u32	esp;		/* |                                    */
	u32	ss;		    /* /                                    */
}STACK_FRAME;


typedef struct s_proc {
	STACK_FRAME regs;          // 进程的所有寄存器都保存在 STACK_FRAME 结构中

	u16 ldt_sel;               // LDT Selector
	DESCRIPTOR ldts[LDT_SIZE]; // 局部描述符 LDT
	u32 pid;                   // 进程ID
	char p_name[16];           // 进程名
}PROCESS;

typedef struct s_task {
    task_f      initial_eip;   // 进程体的函数指针
    int         stacksize;     // 该进程的堆栈大小
    char        name[32];      // 该进程的名称
} TASK;


// 最大允许的进程数
#define NR_TASKS	3

// 进程中的栈
#define STACK_SIZE_TESTA	0x8000
#define STACK_SIZE_TESTB	0x8000
#define STACK_SIZE_TESTC	0x8000

#define STACK_SIZE_TOTAL	(STACK_SIZE_TESTA + STACK_SIZE_TESTB + STACK_SIZE_TESTC)

